//
//  CallInvitationServiceDelegate.swift
//  ZegoUIKitPrebuiltCall
//
//  Created by zego on 2024/1/18.
//

import Foundation


@objc public protocol ZegoUIKitPrebuiltCallInvitationServiceDelegate: AnyObject {
    @objc func requireConfig(_ data: ZegoCallInvitationData) -> ZegoUIKitPrebuiltCallConfig
    @objc optional func onPressed(_ errorCode: Int, errorMessage: String?, errorInvitees: [ZegoCallUser]?)
    // update User Avatar
    @objc optional func onUserIDUpdated(user: ZegoUIKitUser) -> NSString?
    // 当拒绝按钮被按下时（被叫用户拒绝呼叫邀请），将触发此回调。
    @objc optional func onIncomingCallDeclineButtonPressed()
    // 当接受按钮被按下时（被叫用户接受呼叫邀请），将触发此回调。
    @objc optional func onIncomingCallAcceptButtonPressed()
    // 当取消按钮被按下时（主叫用户取消呼叫邀请），将触发此回调。
    @objc optional func onOutgoingCallCancelButtonPressed()
    // 当接收到呼叫邀请时，将触发此回调。
    @objc optional func onIncomingCallReceived(_ callID: String, caller: ZegoCallUser, callType: ZegoCallType, callees: [ZegoCallUser]?)
    // 当主叫用户取消呼叫邀请时，将触发此回调。
    @objc optional func onIncomingCallCanceled(_ callID: String, caller: ZegoCallUser)
    // 当被叫用户接受呼叫邀请时，将通过此回调向主叫用户发送通知。
    @objc optional func onOutgoingCallAccepted(_ callID: String, callee: ZegoCallUser)
    // 当被叫用户拒绝呼叫邀请（被呼叫者忙碌）时，将通过此回调向主叫用户发送通知。
    @objc optional func onOutgoingCallRejectedCauseBusy(_ callID: String, callee: ZegoCallUser)
    // 当被呼叫者主动拒绝呼叫邀请时，将通过此回调向呼叫者发送通知。
    @objc optional func onOutgoingCallDeclined(_ callID: String, callee: ZegoCallUser)
    // 当被叫用户在超时时间后未响应呼叫邀请时，将通过此回调向被叫用户发送通知。
    @objc optional func onIncomingCallTimeout(_ callID: String,  caller: ZegoCallUser)
    // 当呼叫邀请在超时时间后未收到响应时，将通过此回调向呼叫者发送通知。
    @objc optional func onOutgoingCallTimeout(_ callID: String, callees: [ZegoCallUser])
    
    @objc optional func onCallTimeUpdate(_ duration: Int)
    
}
